Server-Client API Template Utilities a.k.a. SCATU

Implements a template defined API for Symbian client-server
communication. All arguments and return values for calls
are moved across the cient-server boundaty automatically.
Also, type compatibility is checked during compile time.

How to use it?

1. Create a new folder (e.g. scatu_defs), add that folder
   to your user include path. Copy the "scatu" folder
   in the folder customize_these there.
   All following modifications are done to these files.
   The current contents contains test data, and is thus an
   excellent example of how to use the stuff.

2. Define your API and server name + uid
   - See the example how to define API functions, basically the format is:
     R***Request<S, FunctionId, RRequestData1<ReturnType>, RRequestDataX<ArgTypes> >

3. Derive a server side session from SessionBase<ServerType>
   - ServerType should be the class discussed in (4.)
   - Include an Api<Server> as member data
   - Implement PopulateRequestArrayL, in which you bind your
     API functions to some real functions by adding them to
     the RServerRequestArray
   - See the CTestSession class

4. Derive a server from ServerBase<ServerType, SessionType>
   - ServerType is this class, we use the CRTP
   - SessionType should be the class discussed in (3.)
   - You usually only keep some kind of engine class here, 
     and provide access to it for sessions, which bind to
     engine functions
   - You can override ConstructL, but remeber to call the
     base class one!
   - See the CTestServer class

5. Derive a client side session from scatu::RSessionBase
   - Include an Api<EClient> as member data
   - Write wrappers for all your functions, which call 
     R***Request< ... >::CallL() from your API
   - See the RTestSession class
   
6. Make sure you have appropriate data adapters available for the
   argument and return types you use. All basic cases should be
   handled. Write more specializations for RDataAdapter<> if necessary.

7. Profit!!! The API should be checked to be correct at compile time
   and all data moves automagically between the client and server.
